#include <stdio.h>
#include <stdbool.h>

struct date {
	int month;
	int day;
	int year;
};

bool isLeap(struct date d);
int numberOfDays(struct date d);

int main(int argc, char const *argv[] )
{
	struct date today, tomorrow;
	
	printf("Enter today’s date (mm dd yyyy):");
	scanf("%i %i %i", &today.month, &today.day, &today.year);
	
	if ( today.day != numberOfDays(today) ) {     //如果这一天不是这个月的追后一天day+1 
		tomorrow.day = today.day+1;
		tomorrow.month = today.month;
		tomorrow.year = today.year;
	} else if ( today.month == 12 ) {            //如果这个是最后一年的最后一天，就变成第二年的1月1号 
		tomorrow.day = 1;
		tomorrow.month = 1;
		tomorrow.year = today.year+1;
	}else{
		tomorrow.day = 1;
		tomorrow.month = today.month+1;         //如果这一个月不是这一年的最后一个月month+1 
		tomorrow.year = today.year;
	}
	
	printf("Tomorrow’s date is %i-%i-%i.\n",
		tomorrow.year, tomorrow.month, tomorrow.day);

	return 0;
}

int numberOfDays(struct date d)                                 //struct结构，date日期（名称），结构类型声明在函数内部，跟本地变量一样依附于函数， 
{                                                              //只能在函数内部使用。所以通常在函数外部声明结构类型，这样就可以被多个函数使用了。 
	int days;
	
	const int daysPerMonth[12] = {31, 28, 31, 30, 31, 30, 31, 30, 31};
	if ( d.month == 2 && isLeap(d) )
		days = 29;
	else
		days = daysPerMonth[d.month-1];
	return days;
}

bool isLeap(struct date d)
{
	bool leap = false;
	
	if( (d.year %4 ==0 && d.year %100 !=0 ) || d.year%400 == 0 )
		leap = true;
		
	return leap;
}